Once we've trimmed the data, we've got to make sure it's accurate and calibrated. We accomplish this by either calibrating the Time-of-Flight (ToF) and converting it into mass-to-charge or by directly working with mass-to-charge. Here's how we do it:
1- Pick out the peaks.
2- Fix any voltage issues.
3- Correct for any bowl-related errors.
There's a special tool at cells below that does all these steps together. After that, we convert the ToF into mass-to-charge using a method that depends on parameters of the fitting function.
# Activate intractive functionality of matplotlib
%matplotlib ipympl
# Activate auto reload
%load_ext autoreload
%autoreload 2
%reload_ext autoreload
# import libraries
import os
import functools
import numpy as np
from scipy.optimize import curve_fit
from ipywidgets import fixed, interact_manual, widgets
from ipywidgets import HBox, VBox
from IPython.display import clear_output
from IPython.display import display
from ipywidgets import Output
import warnings
# Ignore all warnings
warnings.filterwarnings("ignore")
# Local module and scripts
from pyccapt.calibration.calibration_tools import share_variables, calibration
from pyccapt.calibration.calibration_tools import widgets as wd
from pyccapt.calibration.data_tools import data_tools, data_loadcrop, dataset_path_qt
from pyccapt.calibration.calibration_tools import mc_plot
By clicking on the button below, you can select the dataset file you want to use. The dataset file can be in various formats, including HDF5, EPOS, POS, ATO, and CSV.
button = widgets.Button(
description='load dataset',
)
@button.on_click
def open_file_on_click(b):
"""
Event handler for button click event.
Prompts the user to select a dataset file and stores the selected file path in the global variable dataset_path.
"""
global dataset_path
dataset_path = dataset_path_qt.gui_fname().decode('ASCII')
button
!conda install --yes --prefix {sys.prefix} pytables
tdc, pulse_mode, flightPathLength_d, t0_d, max_mc, det_diam = wd.dataset_instrument_specification_selection()
display(tdc, det_diam, pulse_mode, flightPathLength_d, t0_d)
# exctract needed data from Pandas data frame as an numpy array
# create an instance of the Variables opject
variables = share_variables.Variables()
variables.pulse_mode = pulse_mode
dataset_main_path = os.path.dirname(dataset_path)
dataset_main_path = os.path.dirname(dataset_main_path)
dataset_name_with_extention = os.path.basename(dataset_path)
variables.dataset_name = os.path.splitext(dataset_name_with_extention)[0]
variables.result_data_path = dataset_main_path + '/tof_calibration/'
variables.result_data_name = variables.dataset_name
variables.result_path = dataset_main_path + '/tof_calibration/'
if not os.path.isdir(variables.result_path):
os.makedirs(variables.result_path, mode=0o777, exist_ok=True)
# Create data farame out of hdf5 file dataset
data = data_tools.load_data(dataset_path, tdc.value, mode='processed')
# extract data from the path and create the Variable object
data_tools.extract_data(data, variables, flightPathLength_d.value, max_mc.value)
The maximum time of flight: 5010
print('The data will be saved on the path:', variables.result_data_path)
print('=============================')
print('The dataset name after saving is:', variables.result_data_name)
print('=============================')
print('The figures will be saved on the path:', variables.result_path)
print('=============================')
print('Total number of Ions:', len(data))
data
The data will be saved on the path: D:/pyccapt/tests/data/data_1642_Aug-30-2023_16-05_Al_test4/tof_calibration/ ============================= The dataset name after saving is: data_1642_Aug-30-2023_16-05_Al_test4 ============================= The figures will be saved on the path: D:/pyccapt/tests/data/data_1642_Aug-30-2023_16-05_Al_test4/tof_calibration/ ============================= Total number of Ions: 10201109
| x (nm) | y (nm) | z (nm) | mc_c (Da) | mc (Da) | high_voltage (V) | pulse | start_counter | t_c (ns) | t (ns) | x_det (cm) | y_det (cm) | pulse_pi | ion_pp | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0 | 0.0 | 0.0 | 0.0 | 14.136714 | 5019.720215 | 1003.943970 | 3495 | 0.0 | 446.853577 | 2.964898 | -0.169796 | 0 | 0 |
| 1 | 0.0 | 0.0 | 0.0 | 0.0 | 29.616535 | 5019.720215 | 1003.943970 | 3565 | 0.0 | 616.451904 | -1.936327 | 0.088163 | 70 | 2 |
| 2 | 0.0 | 0.0 | 0.0 | 0.0 | 30.456534 | 5019.720215 | 1003.943970 | 4103 | 0.0 | 623.172729 | -1.648980 | 0.672653 | 538 | 1 |
| 3 | 0.0 | 0.0 | 0.0 | 0.0 | 29.550233 | 5019.720215 | 1003.943970 | 4134 | 0.0 | 616.253052 | -1.975510 | -0.218776 | 31 | 1 |
| 4 | 0.0 | 0.0 | 0.0 | 0.0 | 28.966265 | 5019.720215 | 1003.943970 | 4205 | 0.0 | 605.431091 | 1.296327 | -0.173061 | 71 | 1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 10201104 | 0.0 | 0.0 | 0.0 | 0.0 | 141.314648 | 6347.270020 | 1269.453979 | 8768 | 0.0 | 1154.633423 | -0.734694 | -1.577143 | 403 | 1 |
| 10201105 | 0.0 | 0.0 | 0.0 | 0.0 | 29.461296 | 6347.270020 | 1269.453979 | 8799 | 0.0 | 548.825195 | 0.408163 | 1.508571 | 31 | 1 |
| 10201106 | 0.0 | 0.0 | 0.0 | 0.0 | 29.600126 | 6347.270020 | 1269.453979 | 9443 | 0.0 | 547.803345 | -1.165714 | 0.097959 | 485 | 1 |
| 10201107 | 0.0 | 0.0 | 0.0 | 0.0 | 29.719453 | 6347.270020 | 1269.453979 | 9771 | 0.0 | 555.038513 | -1.645714 | 1.296327 | 328 | 1 |
| 10201108 | 0.0 | 0.0 | 0.0 | 0.0 | 29.823040 | 6347.270020 | 1269.453979 | 10327 | 0.0 | 556.574707 | -0.982857 | 1.933061 | 556 | 1 |
10201109 rows × 14 columns
Cell below visualizes the experiment history. You can select the range of the data you want to plot. The plot will be saved in the same directory as the dataset file.
interact_manual(data_loadcrop.plot_crop_experiment_history, data=fixed(data), variables=fixed(variables), max_tof=widgets.FloatText(value=variables.max_tof), frac=widgets.FloatText(value=1.0),
bins=fixed((1200,800)), figure_size=fixed((7,3)),
draw_rect=fixed(False), data_crop=fixed(False), pulse_plot=widgets.Dropdown(options=[('False', False), ('True', True)]), dc_plot=widgets.Dropdown(options=[('True', True), ('False', False)]),
pulse_mode=widgets.Dropdown(options=[('voltage', 'voltage'), ('laser', 'laser')]), save=widgets.Dropdown(options=[('True', True), ('False', False)]),
figname=widgets.Text(value='exp_hist'));
The uncalibrated mass-to-charge ratio that is calculated with previous workflow will be shown below. You can select the range of the data you want to plot. There is also possibility to activate the peak finding tool to show the peak values.
interact_manual(
mc_plot.hist_plot,
variables=fixed(variables),
bin_size=widgets.FloatText(value=0.1),
log=widgets.Dropdown(options=[('True', True), ('False', False)]),
target=widgets.Dropdown(options=[('mc', 'mc'), ('tof', 'tof')]),
mode=widgets.Dropdown(options=[('normal', 'normal'), ('normalized', 'normalized')]),
prominence=widgets.IntText(value=100),
distance=widgets.IntText(value=100),
percent=widgets.IntText(value=50),
selector=fixed('None'),
figname=widgets.Text(value='hist'),
lim=widgets.IntText(value=variables.max_tof),
peaks_find_plot=widgets.Dropdown(options=[('True', True), ('False', False)]),
peaks_find=fixed(True),
range_plot=fixed(False),
plot_ranged_ions=fixed(False),
ranging_mode=fixed(False),
selected_area_specially=fixed(False),
selected_area_temporally=fixed(False),
save_fig=widgets.Dropdown(options=[('True', True), ('False', False)]),
print_info=fixed(True),
figure_size=fixed((9, 5)));
bin_size=widgets.FloatText(value=0.1, description='bin size:')
prominence=widgets.IntText(value=100, description='peak prominance:')
distance=widgets.IntText(value=500, description='peak distance:')
lim_tof=widgets.IntText(value=variables.max_tof, description='lim tof/mc:')
percent=widgets.IntText(value=50, description='percent MRP:')
index_fig = widgets.IntText(value=1, description='fig index:')
plot_peak = widgets.Dropdown(
options=[('False', False), ('True', True)],
description='plot peak'
)
def hist_plot(variables):
with out:
clear_output(True)
mc_plot.hist_plot(variables, bin_size.value, log=True, target='tof', mode='normal', prominence=prominence.value, distance=distance.value, percent=percent.value, selector='rect', figname=index_fig, lim=lim_tof.value,
peaks_find_plot=plot_peak, print_info=False)
sample_size_b = widgets.IntText(value=11, description='sample size:')
index_fig_b = widgets.IntText(value=1, description='fig index:')
maximum_cal_method_b = widgets.Dropdown(
options=[('mean', 'mean'), ('histogram', 'histogram')],
description='calib method:'
)
plot_b = widgets.Dropdown(
options=[('False', False), ('True', True)],
description='plot fig:'
)
save_b = widgets.Dropdown(
options=[('False', False), ('True', True)],
description='save fig:'
)
apply_b = widgets.Dropdown(
options=[('all', 'all'), ('temporal', 'temporal'),],
description='apply mode:'
)
def bowl_correction(dld_x, dld_y, dld_highVoltage, variables):
with out:
sample_size_p = sample_size_b.value
index_fig_p = index_fig_b.value
plot_p = plot_b.value
save_p = save_b.value
maximum_cal_method_p = maximum_cal_method_b.value
calibration.bowl_correction_main(dld_x, dld_y, dld_highVoltage, variables, det_diam.value, sample_size=sample_size_p, maximum_cal_method=maximum_cal_method_p, apply_local=apply_b.value,
calibration_mode='tof', index_fig=index_fig_p, plot=plot_p, save=save_p)
sample_size_v =widgets.IntText(value=100, description='sample size:')
index_fig_v = widgets.IntText(value=1, description='fig index:')
plot_v = widgets.Dropdown(
options=[('False', False), ('True', True)],
description='plot fig:'
)
save_v = widgets.Dropdown(
options=[('False', False), ('True', True)],
description='save fig:'
)
mode_v = widgets.Dropdown(
options=[('ion_seq', 'ion_seq'), ('voltage', 'voltage')],
description='sample mode:'
)
peak_mode = widgets.Dropdown(
options=[('peak', 'peak'), ('mean', 'mean'), ('median', 'median')],
description='peak mode:'
)
num_cluster = widgets.IntText(value=1, description='num_cluster:')
apply_v = widgets.Dropdown(
options=[('all', 'all'), ('voltage', 'voltage'), ('voltage_temporal', 'voltage_temporal')],
description='apply mode:'
)
def vol_correction(dld_highVoltage, variables):
with out:
sample_size_p = sample_size_v.value
index_fig_p = index_fig_v.value
plot_p = plot_v.value
save_p = save_v.value
mode_p = mode_v.value
peak_mode_p = peak_mode.value
calibration.voltage_corr_main(dld_highVoltage, variables, sample_size=sample_size_p, calibration_mode='tof',
index_fig=index_fig_p, plot=plot_p, save=save_p, apply_local=apply_v.value, num_cluster=num_cluster.value, mode=mode_p, peak_mode=peak_mode_p)
pb_bowl = widgets.HTML(
value=" ",
placeholder='Status:',
description='Status:',
)
pb_vol = widgets.HTML(
value=" ",
placeholder='Status:',
description='Status:',
)
plot_button = widgets.Button(
description='plot hist',
)
plot_stat_button = widgets.Button(
description='plot stat',
)
reset_back_button = widgets.Button(
description='reset back correction',
)
reset_button = widgets.Button(
description='reset',
)
save_button = widgets.Button(
description='save correction',
)
bowl_button = widgets.Button(
description='bowl correction',
)
vol_button = widgets.Button(
description='voltage correction',
)
bin_fdm = widgets.IntText(value=256, description='bin FDM:')
@plot_button.on_click
def plot_on_click(b, variables=variables, plot=True):
hist_plot(variables)
@plot_stat_button.on_click
def plot_stat_on_click(b, variables=variables):
with out2:
clear_output(True)
with out:
clear_output(True)
calibration.plot_selected_statistic(variables, bin_fdm.value, index_fig.value, calibration_mode='tof', save=True)
@reset_back_button.on_click
def reset_back_on_click(b, variables=variables):
variables.dld_t_calib = np.copy(variables.dld_t_calib_backup)
@reset_button.on_click
def reset_on_click(b, data=data, variables=variables, flightPathLength_d=flightPathLength_d.value, max_mc=max_mc.value):
data_tools.extract_data(data, variables, flightPathLength_d, max_mc)
@save_button.on_click
def save_on_click(b, variables=variables):
variables.dld_t_calib_backup = np.copy(variables.dld_t_calib)
@vol_button.on_click
def vol_on_click(b, dld_highVoltage=variables.dld_high_voltage, variables=variables):
with out2:
clear_output(True)
pb_vol.value = "<b>Starting...</b>"
if variables.selected_x1 == 0 or variables.selected_x2 == 0:
print('Please first select a peak')
else:
print('Selected tof ranges are: (%s, %s)' %(variables.selected_x1, variables.selected_x2))
vol_correction(dld_highVoltage, variables)
pb_vol.value = "<b>Flished</b>"
@bowl_button.on_click
def bowl_on_click(b, dld_x_det=variables.dld_x_det, dld_y_det=variables.dld_y_det, dld_highVoltage=variables.dld_high_voltage, variables=variables):
with out2:
clear_output(True)
pb_bowl.value = "<b>Starting...</b>"
if variables.selected_x1 == 0 or variables.selected_x2 == 0:
print('Please first select a peak')
else:
print('Selected tof ranges are: (%s, %s)' %(variables.selected_x1, variables.selected_x2))
bowl_correction(dld_x_det, dld_y_det, dld_highVoltage, variables)
pb_bowl.value = "<b>Flished</b>"
tab1 = VBox(children=[bin_size, index_fig, prominence, distance, lim_tof, percent, bin_fdm, plot_peak])
tab2 = VBox(children=[VBox(children=[sample_size_b, index_fig_b, maximum_cal_method_b, apply_b, plot_b, save_b]), bowl_button, pb_bowl])
tab3 = VBox(children=[VBox(children=[sample_size_v, index_fig_v, mode_v, apply_v, num_cluster, peak_mode, plot_v, save_v]), vol_button, pb_vol])
tab = widgets.Tab(children=[tab1, tab2, tab3])
tab.set_title(0, 'tof/mc plot')
tab.set_title(1, 'bowl correction')
tab.set_title(2, 'voltage correction')
Below you can plot the ToF histogram of the dataset. You can select the peak range of the data you want to plot by drawing a rectangle over peak with holding left click. After that you should apply the voltage and bowl calibration. These three steps should be repeated until you see no improvement in the peak resolution. You can also save the calibration by clicking on the save button. The saved calibration will be used for the next steps.
display(VBox(children=[tab,HBox(children=[plot_button, plot_stat_button, save_button, reset_back_button, reset_button])]))
out = Output()
out2 = Output()
display(out)
Here you have to select three known peaks that you know the mass-to-charge ratio. Select the peak with left click and deselect them with right click.
interact_manual(
mc_plot.hist_plot,
variables=fixed(variables),
bin_size=widgets.FloatText(value=0.1),
log=widgets.Dropdown(options=[('True', True), ('False', False)]),
target=widgets.Dropdown(options=[('tof', 'tof')]),
mode=widgets.Dropdown(options=[('normal', 'normal'), ('normalized', 'normalized')]),
prominence=widgets.IntText(value=100),
distance=widgets.IntText(value=100),
percent=widgets.IntText(value=50),
selector=fixed('peak'),
figname=widgets.Text(value='tof_hist_calibrated'),
lim=widgets.IntText(value=variables.max_tof),
peaks_find_plot=widgets.Dropdown(options=[('True', True), ('False', False)]),
peaks_find=fixed(True),
range_plot=fixed(False),
plot_ranged_ions=fixed(False),
ranging_mode=fixed(False),
selected_area_specially=fixed(False),
selected_area_temporally=fixed(False),
save_fig=widgets.Dropdown(options=[('True', True), ('False', False)]),
print_info=fixed(True),
figure_size=fixed((9, 5)));
For the selected peak you have to select the mass-to-charge ratio of the peak. You can select the mass-to-charge ratio from the dropdown list below. You can also select the charge of the peak. After that you can add the peak to the list by clicking on the add button. You can also delete the selected peak from the list by clicking on the delete button. You can reset the list by clicking on the reset button.
isotopeTableFile = '../../../files/isotopeTable.h5'
dataframe = data_tools.read_hdf5_through_pandas(isotopeTableFile)
elementsList = dataframe['element']
elementIsotopeList = dataframe['isotope']
elementMassList = dataframe['weight']
abundanceList = dataframe['abundance']
elements = list(zip(elementsList, elementIsotopeList, elementMassList, abundanceList))
dropdownList = []
for element in elements:
tupleElement = ("{} ({}) ({:.2f})".format(element[0], element[1], element[3]), "{}({})[{}]".format(element[0], element[1], element[2]))
dropdownList.append(tupleElement)
chargeList = [(1,1,),(2,2,),(3,3,),(4,4,)]
dropdown = wd.dropdownWidget(dropdownList,"Elements")
dropdown.observe(wd.on_change)
chargeDropdown = wd.dropdownWidget(chargeList,"Charge")
chargeDropdown.observe(wd.on_change_charge)
wd.compute_element_isotope_values_according_to_selected_charge()
buttonAdd = wd.buttonWidget("ADD")
buttonDelete = wd.buttonWidget("DELETE")
buttonReset = wd.buttonWidget("RESET")
display(dropdown, chargeDropdown, buttonAdd, buttonDelete, buttonReset)
def buttonAdd_f(b, variables):
with out:
clear_output(True)
wd.onClickAdd(b, variables)
display()
def buttonDelete_f(b, variables):
with out:
clear_output(True)
wd.onClickDelete(b, variables)
display()
def buttonResett_f(b, variables):
with out:
clear_output(True)
wd.onClickReset(b, variables)
display()
buttonAdd.on_click(functools.partial(buttonAdd_f, variables=variables))
buttonDelete.on_click(functools.partial(buttonDelete_f, variables=variables))
buttonReset.on_click(functools.partial(buttonResett_f, variables=variables))
out = Output()
display(out)
variables.dld_t_calib_backup = np.copy(variables.dld_t_calib)
variables.mc_calib_backup = np.copy(variables.mc_calib)
Here you can see the selected peak ToF and related mass-to-charge.
peaks_chos = np.array(variables.peaks_x_selected)
variables.listMaterial = np.array(variables.list_material)
print('highest peak in the tof histogram:', peaks_chos)
print('highest peak in the ideal mc:', variables.listMaterial)
highest peak in the tof histogram: [141.88293444 413.45490177 569.69088151] highest peak in the ideal mc: [ 1.01 13.49 26.98]
def parametric(t, t0, c, d):
return c * ((t - t0)**2) + d*t
def parametric_calib(t, mc_ideal):
fitresult, _ = curve_fit(parametric, t, mc_ideal, maxfev=2000)
return fitresult
fitresult = parametric_calib(peaks_chos, variables.listMaterial)
variables.mc_calib = parametric(variables.dld_t_calib, *fitresult)
print('The t0 is:', fitresult[0], 'ns')
The t0 is: 17.245305528044668 ns
The calibrated mass-to-charge histogram can be checked below.
interact_manual(
mc_plot.hist_plot,
variables=fixed(variables),
bin_size=widgets.FloatText(value=0.1),
log=widgets.Dropdown(options=[('True', True), ('False', False)]),
target=widgets.Dropdown(options=[('mc', 'mc')]),
mode=widgets.Dropdown(options=[('normal', 'normal'), ('normalized', 'normalized')]),
prominence=widgets.IntText(value=100),
distance=widgets.IntText(value=100),
percent=widgets.IntText(value=50),
selector=fixed('None'),
figname=widgets.Text(value='tof_shifted_hist_calibrated'),
lim=widgets.IntText(value=variables.max_mc),
peaks_find_plot=widgets.Dropdown(options=[('True', True), ('False', False)]),
peaks_find=fixed(True),
range_plot=fixed(False),
plot_ranged_ions=fixed(False),
ranging_mode=fixed(False),
selected_area_specially=fixed(False),
selected_area_temporally=fixed(False),
save_fig=widgets.Dropdown(options=[('True', True), ('False', False)]),
print_info=fixed(True),
figure_size=fixed((9, 5)));
data['mc_c (Da)'] = variables.mc_calib
data['t_c (ns)'] = variables.dld_t_calib
data
| x (nm) | y (nm) | z (nm) | mc_c (Da) | mc (Da) | high_voltage (V) | pulse | start_counter | t_c (ns) | t (ns) | x_det (cm) | y_det (cm) | pulse_pi | ion_pp | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0 | 0.0 | 0.0 | 13.450285 | 14.136714 | 5019.720215 | 1003.943970 | 3495 | 412.899765 | 446.853577 | 2.964898 | -0.169796 | 0 | 0 |
| 1 | 0.0 | 0.0 | 0.0 | 26.983236 | 29.616535 | 5019.720215 | 1003.943970 | 3565 | 569.722887 | 616.451904 | -1.936327 | 0.088163 | 70 | 2 |
| 2 | 0.0 | 0.0 | 0.0 | 27.722095 | 30.456534 | 5019.720215 | 1003.943970 | 4103 | 576.981893 | 623.172729 | -1.648980 | 0.672653 | 538 | 1 |
| 3 | 0.0 | 0.0 | 0.0 | 26.956814 | 29.550233 | 5019.720215 | 1003.943970 | 4134 | 569.461476 | 616.253052 | -1.975510 | -0.218776 | 31 | 1 |
| 4 | 0.0 | 0.0 | 0.0 | 27.029927 | 28.966265 | 5019.720215 | 1003.943970 | 4205 | 570.184518 | 605.431091 | 1.296327 | -0.173061 | 71 | 1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 10201104 | 0.0 | 0.0 | 0.0 | 128.577300 | 141.314648 | 6347.270020 | 1269.453979 | 8768 | 1201.675435 | 1154.633423 | -0.734694 | -1.577143 | 403 | 1 |
| 10201105 | 0.0 | 0.0 | 0.0 | 27.145753 | 29.461296 | 6347.270020 | 1269.453979 | 8799 | 571.327970 | 548.825195 | 0.408163 | 1.508571 | 31 | 1 |
| 10201106 | 0.0 | 0.0 | 0.0 | 27.070999 | 29.600126 | 6347.270020 | 1269.453979 | 9443 | 570.590274 | 547.803345 | -1.165714 | 0.097959 | 485 | 1 |
| 10201107 | 0.0 | 0.0 | 0.0 | 26.987780 | 29.719453 | 6347.270020 | 1269.453979 | 9771 | 569.767836 | 555.038513 | -1.645714 | 1.296327 | 328 | 1 |
| 10201108 | 0.0 | 0.0 | 0.0 | 27.160412 | 29.823040 | 6347.270020 | 1269.453979 | 10327 | 571.472518 | 556.574707 | -0.982857 | 1.933061 | 556 | 1 |
10201109 rows × 14 columns
data_c = data.copy(deep=True)
# Remove negative mc
threshold = 0
mc_t = data_c['mc_c (Da)'].to_numpy()
mc_t_mask = (mc_t <= threshold)
print('The number of ions with negative mc are:', len(mc_t_mask[mc_t_mask==True]))
data_c.drop(np.where(mc_t_mask)[0], inplace=True)
data_c.reset_index(inplace=True, drop=True)
The number of ions with negative mc are: 9954
data_c
| x (nm) | y (nm) | z (nm) | mc_c (Da) | mc (Da) | high_voltage (V) | pulse | start_counter | t_c (ns) | t (ns) | x_det (cm) | y_det (cm) | pulse_pi | ion_pp | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0.0 | 0.0 | 0.0 | 13.450285 | 14.136714 | 5019.720215 | 1003.943970 | 3495 | 412.899765 | 446.853577 | 2.964898 | -0.169796 | 0 | 0 |
| 1 | 0.0 | 0.0 | 0.0 | 26.983236 | 29.616535 | 5019.720215 | 1003.943970 | 3565 | 569.722887 | 616.451904 | -1.936327 | 0.088163 | 70 | 2 |
| 2 | 0.0 | 0.0 | 0.0 | 27.722095 | 30.456534 | 5019.720215 | 1003.943970 | 4103 | 576.981893 | 623.172729 | -1.648980 | 0.672653 | 538 | 1 |
| 3 | 0.0 | 0.0 | 0.0 | 26.956814 | 29.550233 | 5019.720215 | 1003.943970 | 4134 | 569.461476 | 616.253052 | -1.975510 | -0.218776 | 31 | 1 |
| 4 | 0.0 | 0.0 | 0.0 | 27.029927 | 28.966265 | 5019.720215 | 1003.943970 | 4205 | 570.184518 | 605.431091 | 1.296327 | -0.173061 | 71 | 1 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 10191150 | 0.0 | 0.0 | 0.0 | 128.577300 | 141.314648 | 6347.270020 | 1269.453979 | 8768 | 1201.675435 | 1154.633423 | -0.734694 | -1.577143 | 403 | 1 |
| 10191151 | 0.0 | 0.0 | 0.0 | 27.145753 | 29.461296 | 6347.270020 | 1269.453979 | 8799 | 571.327970 | 548.825195 | 0.408163 | 1.508571 | 31 | 1 |
| 10191152 | 0.0 | 0.0 | 0.0 | 27.070999 | 29.600126 | 6347.270020 | 1269.453979 | 9443 | 570.590274 | 547.803345 | -1.165714 | 0.097959 | 485 | 1 |
| 10191153 | 0.0 | 0.0 | 0.0 | 26.987780 | 29.719453 | 6347.270020 | 1269.453979 | 9771 | 569.767836 | 555.038513 | -1.645714 | 1.296327 | 328 | 1 |
| 10191154 | 0.0 | 0.0 | 0.0 | 27.160412 | 29.823040 | 6347.270020 | 1269.453979 | 10327 | 571.472518 | 556.574707 | -0.982857 | 1.933061 | 556 | 1 |
10191155 rows × 14 columns
Save the cropped dataset. You can specify te output format from list below. The output formats are HDF5, EPOS, POS, ATO, and CSV. The output file will be saved in the same directory as the original dataset file in a new directory nammed load_crop.
interact_manual(data_tools.save_data, data=fixed(data_c), variables=fixed(variables),
hdf=widgets.Dropdown(options=[('True', True), ('False', False)]),
epos=widgets.Dropdown(options=[('False', False), ('True', True)]),
pos=widgets.Dropdown(options=[('False', False), ('True', True)]),
ato_6v=widgets.Dropdown(options=[('False', False), ('True', True)]),
csv=widgets.Dropdown(options=[('False', False), ('True', True)]));